package meituan.summer10;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

/**
 * @Author Fizz Pu
 * @Date 2021/4/14 下午5:19
 * @Version 1.0
 * 失之毫厘，缪之千里！
 */

/*
小美和小团所在公司的食堂有N张餐桌，从左到右摆成一排，每张餐桌有2张餐椅供至多2人用餐，公司职员排队进入食堂用餐。小美发现职员用餐的一个规律并告诉小团：当男职员进入食堂时，他会优先选择已经坐有1人的餐桌用餐，只有当每张餐桌要么空着要么坐满2人时，他才会考虑空着的餐桌；

当女职员进入食堂时，她会优先选择未坐人的餐桌用餐，只有当每张餐桌都坐有至少1人时，她才会考虑已经坐有1人的餐桌；

无论男女，当有多张餐桌供职员选择时，他会选择最靠左的餐桌用餐。现在食堂内已有若干人在用餐，另外M个人正排队进入食堂，小团会根据小美告诉他的规律预测排队的每个人分别会坐哪张餐桌。


输入描述:
第一行输入一个整数T（1<=T<=10），表示数据组数。

每组数据占四行，第一行输入一个整数N（1<=N<=500000）；

第二行输入一个长度为N且仅包含数字0、1、2的字符串，第i个数字表示左起第i张餐桌已坐有的用餐人数；

第三行输入一个整数M（1<=M<=2N且保证排队的每个人进入食堂时都有可供选择的餐桌）；

第四行输入一个长度为M且仅包含字母M、F的字符串，若第i个字母为M，则排在第i的人为男性，否则其为女性。


输出描述:
每组数据输出占M行，第i行输出一个整数j（1<=j<=N），表示排在第i的人将选择左起第j张餐桌用餐。


输入例子1:
1
5
01102
6
MFMMFF

输出例子1:
2
1
1
3
4
4
 */

public class Main3 {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int testNumber = Integer.parseInt(br.readLine());
        for(int i = 0; i < testNumber; i++){
            int tableCount = Integer.parseInt(br.readLine());
            String tableState = br.readLine();
            int personCount = Integer.parseInt(br.readLine());
            String personState = br.readLine();


            // k : 桌子剩余人数; v: 桌子的位置列表, 从左往右排列
            Map<Integer, List<Integer>> map = new HashMap<>();
            for(int j = 0; j < tableCount; j++){
                int rest = 2 - tableState.charAt(j);
                if(!map.containsKey(rest)){
                    map.put(rest, new ArrayList<>());
                }
                map.get(rest).add(j+1);
            }

            for(int k = 0; k < personCount; k++){
                char personName = personState.charAt(k);
                List<Integer> list;
                int seat;
                if(personName == 'M'){
                    list  = map.get(1);
                    if(!list.isEmpty()){
                        seat = list.get(0);
                        System.out.println(seat);
                        list.remove(0);
                        map.get(0).add(seat);
                        // map.get(0).sort(); // 排序
                    } else {
                        seat = map.get(2).get(0);
                        map.get(2).remove(0);
                        map.get(1).add(seat);
                       // map.get(1).sort();
                    }
                } else if (personName == 'F'){
                    list = map.get(2);
                    if(!list.isEmpty()){
                        seat = list.get(0);
                        System.out.println(seat);
                        list.remove(0);
                        map.get(1).add(seat);
                        // map.get(1).sort();
                    } else{
                        seat = list.get(0);
                        System.out.println(seat);
                        list.remove(0);
                        map.get(0).add(seat);
                        // map.get(0).sort(); // 排序
                    }
                } else{
                    throw  new RuntimeException();
                }

            }
        }


    }
}
